#!/bin/bash

# 设置统一的语言环境
export LC_ALL=C

# 定义时间范围，从7月1日到当前日期
SINCE="2024-07-01"
UNTIL=$(date +"%Y-%m-%d")

# 钉钉机器人 Access Token 和密钥
ACCESS_TOKEN="a0468fd95cce46a3a732b1b71385e964178d9693f52d5d06a0c198ae8c45b340"
SECRET="SEC73025ebc77833a0d097fcda3c0d18c255cfc70425b12f3ce399c4ecd845c8c93"

# 生成签名
python3 generate_sign.py

# 读取签名和时间戳
read -r timestamp sign < sign_data.txt

# 构建Webhook URL
WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=${ACCESS_TOKEN}&timestamp=${timestamp}&sign=${sign}"

# 初始化消息文本
MESSAGE="代码提交统计 (从 $SINCE 到 $UNTIL):\n"

# 获取所有提交并按作者分组，限定时间范围
echo "获取提交次数统计..."

# 输出提交作者列表
ALL_AUTHORS=$(git log --since="$SINCE" --until="$UNTIL" --pretty=format:'%an <%ae>' | sort | uniq)
if [ -z "$ALL_AUTHORS" ]; then
    echo "未找到任何提交记录。"
    exit 1
fi
echo -e "所有提交作者:\n$ALL_AUTHORS"

SUBMISSION_STATS=$(git log --since="$SINCE" --until="$UNTIL" --pretty=format:'%an' | sort | uniq -c | sort -nr)
if [ -z "$SUBMISSION_STATS" ]; then
    echo "未找到提交记录。"
    exit 1
fi
MESSAGE+="代码提交次数统计 (从 $SINCE 到 $UNTIL):\n$SUBMISSION_STATS\n\n"

# 打印每个作者的代码行数，限定时间范围
echo "获取每个作者的代码行数统计..."

for author in $(git log --since="$SINCE" --until="$UNTIL" --pretty=format:'%aN' | sort -u)
do
    echo "处理作者: $author"
    AUTHOR_LOG=$(git log --since="$SINCE" --until="$UNTIL" --author="$author" --pretty=format:'%h - %s (%cd)' --date=short)

    # 获取日志详情前3条
    FIRST_THREE_LOGS=$(echo "$AUTHOR_LOG" | head -n 3)
    LOG_COUNT=$(echo "$AUTHOR_LOG" | wc -l)
    REMAINING_COUNT=$((LOG_COUNT - 3))

    if [ "$LOG_COUNT" -gt 3 ]; then
        AUTHOR_LOG="${FIRST_THREE_LOGS}\n... 省略 $REMAINING_COUNT 条日志"
    fi

    echo -e "作者 $author 的日志详情:\n$AUTHOR_LOG"

    AUTHOR_STATS=$(git log --since="$SINCE" --until="$UNTIL" --author="$author" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2 } END { printf " 添加的行数: %s, 删除的行数: %s, 总共更改的行数: %s", add, subs, add - subs }' -)
    if [ -n "$AUTHOR_STATS" ]; then
        MESSAGE+="$author:\n$AUTHOR_STATS\n日志详情:\n$AUTHOR_LOG\n\n"
    else
        MESSAGE+="$author:\n 无更改记录\n\n"
    fi
done

echo -e "$MESSAGE"  # 将消息打印到控制台，用于调试

# 将统计结果发送到钉钉机器人
PAYLOAD=$(printf '{"msgtype": "text", "text": {"content": "%s"}}' "$MESSAGE")
curl -s -X POST "$WEBHOOK_URL" -H "Content-Type: application/json" -d "$PAYLOAD"

# 清理临时文件
rm sign_data.txt
